<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>PostgreSQL 规则系统</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="parser-stage.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="overview.html">快退</a></td><td width="60%" align="center" valign="bottom">章42. PostgreSQL 内部概貌</td><td width="10%" align="right" valign="top"><a href="overview.html">快进</a></td><td width="10%" align="right" valign="top"><a href="planner-optimizer.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="RULE-SYSTEM">42.4. PostgreSQL 规则系统</a></h1>
<p>PostgreSQL 有一个强大的<i class="FIRSTTERM">规则系统</i>，用以描述<i class="FIRSTTERM">视图</i>和不明确的<i class="FIRSTTERM">视图更新</i>。最初的 PostgreSQL 规则系统由两个实现组成：</p>
<ul>
<li><p>第一个能用的规则系统采用<i class="FIRSTTERM">行级别</i>的处理，是在<i class="FIRSTTERM">执行器</i>的深层实现的。每次访问一条独立的行时都要调用规则系统。这个实现在 1995 年被删除了，那时伯克力 Postgres 项目的最后一个官方版本正转换成 PostgreSQL 95 。</p></li>
<li><p>第二个规则系统的实现从技术角度来说叫<i class="FIRSTTERM">查询重写</i>。<i class="FIRSTTERM">重写系统</i>是一个存在于<i class="FIRSTTERM">分析器阶段</i>和<i class="FIRSTTERM">规划器/优化器</i>之间的一个模块。这个技术实现仍然存在。</p></li>
</ul>
<p>查询重写在<a href="rules.html">章35</a>里有比较详细的讨论，所以无需再次介绍。只需要说明重写器的输入和输出都是查询树，也就是说，在树的语意细节的表现或者层次方面没有变化。可以把重写系统当作某种宏展开的机制。</p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="parser-stage.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="planner-optimizer.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">分析器阶段</td><td width="34%" align="center" valign="top"><a href="overview.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">规划器/优化器</td></tr>
</table>
</div>
</body></html>